package com.foo.designpattern.factory.factorymethodpattern;

/**
 * com.foo.designpattern.factory.factorymethodpattern
 * Created with IntelliJ IDEA.
 * User: wangyuxi
 * DateTime: 2016/4/1721:18
 *
 * @desc 工厂方法模式是简单工厂模式的衍生，解决了许多简单工厂模式的问题。
 * 首先完全实现‘开－闭 原则’，实现了可扩展。其次更复杂的层次结构，可以应用于产品结果复杂的场合。
 * 工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类（可以是抽象类和接口），这个类将不在负责具体的产品生产，而是只制定一些规范，具体的生产工作由其子类去完成。在这个模式中，工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品，一个具体工厂对应一个具体产品，这个具体的工厂就负责生产对应的产品。
 * 工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。
 * <p/>
 * <p/>
 * <p/>
 * 基于面向接口编程的原理，创建部分成为抽象工厂与实体工厂，创建出的对象成为抽象产品与实体产品。你可能知道为什么它能解决上面的问题了：多了一个新对象，只需添加一套对应的工厂和产品就可以了，不需要修改原代码，或只需进行少量的修改。
 * 具体：
 * 实体工厂实现抽象工厂，实体产品实现抽象产品；抽象工厂生产抽象产品，实体工厂生产实体产品；实体工厂A生产实体产品A，实体工厂B生产实体产品B。
 */
public class BmwFactory implements Icarfactory {
    @Override
    public Icar createCar() {
        return new Bmw();
    }
}
